#include <bits/stdc++.h>
using ll =long long;
using namespace std;
//https://www.nowcoder.com/practice/8b3b95850edb4115918ecebdf1b4d222?tpId=13&tqId=11192&ru=/exam/oj
// 是否为平衡二叉树
/**
 * struct TreeNode {
 *	int val;
 *	struct TreeNode *left;
 *	struct TreeNode *right;
 *	TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 * };
 */
// class Solution {
//     public:
//         bool IsBalanced_Solution(TreeNode* pRoot) {
//             return dfs(pRoot)!=-1;
//         }
//         int dfs(TreeNode* root)
//         {
//             //返回-1代表不是平衡二叉树，返回其他值代表树的高度
//             if(root==nullptr)return 0;
//             int left=dfs(root->left);
//             if(left==-1)return -1;
//             int right=dfs(root->right);
//             if(right==-1)return -1;
//             return abs(left-right)<=1?max(left,right)+1:-1;
//         }
//     };
// int n;
// int main()
// {
//     cin>>n;
//     vector<vector<int>> in(n+1,vector<int>(n+1,0));
//     vector<vector<int>> out(n+1,vector<int>(n+1,0));
//     ll maxl=LLONG_MIN;
//     int tempi=0,tempj=0;
//     for(int i=1;i<=n;i++)
//     {
//         for(int j=1;j<=n;j++)
//         {
//             cin>>in[i][j];
//             out[i][j]=out[i-1][j]+out[i][j-1]+in[i][j]-out[i-1][j-1];
//         }
//     }
//     for(int x1=1;x1<=n;x1++)
//     {
//         for(int y1=1;y1<=n;y1++)
//         {
//             for(int x2=x1;x2<=n;x2++)
//             {
//                 for(int y2=y1;y2<=n;y2++)
//                 {
//                     ll ret=out[x2][y2]-out[x1-1][y2]-out[x2][y1-1]+out[x1-1][y1-1];
//                     maxl=max(maxl,ret);
//                 }
//             }
//         }
//     }
//     cout<<maxl<<endl;
//     return 0;
// }


int n;
string s;
int onenum=0,zeronum=0;
int func()
{
    for(char& x:s)
    {
        if(x=='0')zeronum++;
        if(x=='1')onenum++;
    }
    //拼接两个字符串可以处理环形，最后通过left和right的大小关系结束循环即可
    string temp=s+s;
    int count=0,left=0,right=s.size()/2-1;
    int red0=0,red1=0;
    for(int i=left;i<=right;i++)
    {
        if(temp[i]=='0')red0++;
        if(temp[i]=='1')red1++;
    }
    while(left<s.size())
    {
        int white1=onenum-red1;
        int white0=zeronum-red0;
        if(red1==white1&&red0==white0)count++;
        //移动窗口
        if(temp[left]=='0')red0--;
        if(temp[left]=='1')red1--;
        left++,right++;
        //环形也不能超过字符串长度
        if(right<temp.size())
        {
            if(temp[right]=='0')red0++;
            if(temp[right]=='1')red1++;
        }
    }
    return count;
}
int main() 
{
    cin>>n>>s;
    cout<<func()<<endl;
    return 0;
}
